home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / chaserog.zip / SRC_ROG.ZIP / PLAYER.QC < prev    next >
Text File  |  1997-05-02  |  22KB  |  846 lines

  1.  
  2. void() bubble_bob;
  3.  
  4. /*
  5. ==============================================================================
  6.  
  7. PLAYER
  8.  
  9. ==============================================================================
  10. */
  11.  
  12. $cd /raid/quake/id1/models/player_4
  13. $origin 0 -6 24
  14. $base base        
  15. $skin skin
  16.  
  17. //
  18. // running
  19. //
  20. $frame axrun1 axrun2 axrun3 axrun4 axrun5 axrun6
  21.  
  22. $frame rockrun1 rockrun2 rockrun3 rockrun4 rockrun5 rockrun6
  23.  
  24. //
  25. // standing
  26. //
  27. $frame stand1 stand2 stand3 stand4 stand5
  28.  
  29. $frame axstnd1 axstnd2 axstnd3 axstnd4 axstnd5 axstnd6
  30. $frame axstnd7 axstnd8 axstnd9 axstnd10 axstnd11 axstnd12
  31.  
  32.  
  33. //
  34. // pain
  35. //
  36. $frame axpain1 axpain2 axpain3 axpain4 axpain5 axpain6
  37.  
  38. $frame pain1 pain2 pain3 pain4 pain5 pain6
  39.  
  40.  
  41. //
  42. // death
  43. //
  44.  
  45. $frame axdeth1 axdeth2 axdeth3 axdeth4 axdeth5 axdeth6
  46. $frame axdeth7 axdeth8 axdeth9
  47.  
  48. $frame deatha1 deatha2 deatha3 deatha4 deatha5 deatha6 deatha7 deatha8
  49. $frame deatha9 deatha10 deatha11
  50.  
  51. $frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
  52. $frame deathb9
  53.  
  54. $frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
  55. $frame deathc9 deathc10 deathc11 deathc12 deathc13 deathc14 deathc15
  56.  
  57. $frame deathd1 deathd2 deathd3 deathd4 deathd5 deathd6 deathd7
  58. $frame deathd8 deathd9
  59.  
  60. $frame deathe1 deathe2 deathe3 deathe4 deathe5 deathe6 deathe7
  61. $frame deathe8 deathe9
  62.  
  63. //
  64. // attacks
  65. //
  66. $frame nailatt1 nailatt2
  67.  
  68. $frame light1 light2
  69.  
  70. $frame rockatt1 rockatt2 rockatt3 rockatt4 rockatt5 rockatt6
  71.  
  72. $frame shotatt1 shotatt2 shotatt3 shotatt4 shotatt5 shotatt6
  73.  
  74. $frame axatt1 axatt2 axatt3 axatt4 axatt5 axatt6
  75.  
  76. $frame axattb1 axattb2 axattb3 axattb4 axattb5 axattb6
  77.  
  78. $frame axattc1 axattc2 axattc3 axattc4 axattc5 axattc6
  79.  
  80. $frame axattd1 axattd2 axattd3 axattd4 axattd5 axattd6
  81.  
  82.  
  83. /*
  84. ==============================================================================
  85. PLAYER
  86. ==============================================================================
  87. */
  88.  
  89. void() player_run;
  90.  
  91. void()    player_stand1 =[    $axstnd1,    player_stand1    ]
  92. {
  93.     self.weaponframe=0;
  94.     if (self.velocity_x || self.velocity_y)
  95.     {
  96.         // Rob
  97.         if ( (self.sw_hook & HOOK_IN) )
  98.         {
  99.             if ( (self.flags & FL_ONGROUND) )
  100.             {
  101.                 self.walkframe=0;
  102.                 player_run();
  103.                 return;
  104.             }
  105.         }
  106.         else
  107.         {
  108.             self.walkframe=0;
  109.             player_run();
  110.             return;
  111.         }
  112.         //self.walkframe=0;
  113.         //player_run();
  114.         //return;
  115.     }
  116.  
  117.     if (self.weapon == IT_AXE)
  118.     {
  119.         if (self.walkframe >= 12)
  120.             self.walkframe = 0;
  121.         self.frame = $axstnd1 + self.walkframe;
  122.     }
  123.     else
  124.     {
  125.         if (self.walkframe >= 5)
  126.             self.walkframe = 0;
  127.         self.frame = $stand1 + self.walkframe;
  128.     }
  129.     self.walkframe = self.walkframe + 1;    
  130. };
  131.  
  132. void()    player_run =[    $rockrun1,    player_run    ]
  133. {
  134.     self.weaponframe=0;
  135.  
  136.     // Rob
  137.     if ( (self.sw_hook & HOOK_IN) )
  138.     {
  139.         if (!(self.flags & FL_ONGROUND) )
  140.         {
  141.             self.walkframe=0;
  142.             player_stand1();
  143.             return;
  144.         }
  145.     }
  146.  
  147.     if (!self.velocity_x && !self.velocity_y)
  148.     {
  149.         self.walkframe=0;
  150.         player_stand1();
  151.         return;
  152.     }
  153.  
  154.     if (self.weapon == IT_AXE)
  155.     {
  156.         if (self.walkframe == 6)
  157.             self.walkframe = 0;
  158.         self.frame = $axrun1 + self.walkframe;
  159.     }
  160.     else
  161.     {
  162.         if (self.walkframe == 6)
  163.             self.walkframe = 0;
  164.         self.frame = self.frame + self.walkframe;
  165.     }
  166.     self.walkframe = self.walkframe + 1;
  167. };
  168.  
  169.  
  170. void()    player_shot1 =    [$shotatt1, player_shot2    ] {self.weaponframe=1;
  171. self.effects = self.effects | EF_MUZZLEFLASH;};
  172. void()    player_shot2 =    [$shotatt2, player_shot3    ] {self.weaponframe=2;};
  173. void()    player_shot3 =    [$shotatt3, player_shot4    ] {self.weaponframe=3;};
  174. void()    player_shot4 =    [$shotatt4, player_shot5    ] {self.weaponframe=4;};
  175. void()    player_shot5 =    [$shotatt5, player_shot6    ] {self.weaponframe=5;};
  176. void()    player_shot6 =    [$shotatt6, player_run    ] {self.weaponframe=6;};
  177.  
  178. void()    player_axe1 =    [$axatt1, player_axe2    ] {self.weaponframe=1;};
  179. void()    player_axe2 =    [$axatt2, player_axe3    ] {self.weaponframe=2;};
  180. void()    player_axe3 =    [$axatt3, player_axe4    ] {self.weaponframe=3;W_FireAxe();};
  181. void()    player_axe4 =    [$axatt4, player_run    ] {self.weaponframe=4;};
  182.  
  183. void()    player_axeb1 =    [$axattb1, player_axeb2    ] {self.weaponframe=5;};
  184. void()    player_axeb2 =    [$axattb2, player_axeb3    ] {self.weaponframe=6;};
  185. void()    player_axeb3 =    [$axattb3, player_axeb4    ] {self.weaponframe=7;W_FireAxe();};
  186. void()    player_axeb4 =    [$axattb4, player_run    ] {self.weaponframe=8;};
  187.  
  188. void()    player_axec1 =    [$axattc1, player_axec2    ] {self.weaponframe=1;};
  189. void()    player_axec2 =    [$axattc2, player_axec3    ] {self.weaponframe=2;};
  190. void()    player_axec3 =    [$axattc3, player_axec4    ] {self.weaponframe=3;W_FireAxe();};
  191. void()    player_axec4 =    [$axattc4, player_run    ] {self.weaponframe=4;};
  192.  
  193. void()    player_axed1 =    [$axattd1, player_axed2    ] {self.weaponframe=5;};
  194. void()    player_axed2 =    [$axattd2, player_axed3    ] {self.weaponframe=6;};
  195. void()    player_axed3 =    [$axattd3, player_axed4    ] {self.weaponframe=7;W_FireAxe();};
  196. void()    player_axed4 =    [$axattd4, player_run    ] {self.weaponframe=8;};
  197.  
  198. //============================================================================
  199. //ZOID--
  200. void() player_grapple3;
  201. void() player_grapple4;
  202. void() player_grapple5;
  203.  
  204. void()  player_grapple1 =  [$axattd1, player_grapple2 ] 
  205.     { self.weaponframe=1; W_FireGrapple(); };
  206. //    { self.weaponframe=2; W_FireGrapple(); };
  207. void()  player_grapple2 =  [$axattd2, player_grapple3 ]
  208.     { self.weaponframe=2; };
  209. //    { self.weaponframe=3; };
  210. void()  player_grapple3 =  [$axattd3, player_grapple3 ]
  211.     {
  212. //        self.weaponframe=3;
  213.         self.weaponframe=2;
  214.         if (!self.hook_out) {
  215.                 player_grapple5();
  216.                 return;
  217.         }
  218.         if (vlen(self.hook.origin - self.origin) >= 50) {
  219.             if (self.on_hook) {
  220.                 player_grapple4();
  221.                 return;
  222.             }
  223.         }
  224.     };
  225. void() player_grapple4 =  [$deathc4, player_grapple4 ]
  226.     {
  227. //        self.weaponframe=4;
  228.         self.weaponframe=2;
  229.         if (!self.hook_out) {
  230.             player_grapple5();
  231.             return;
  232.         }
  233.         if (vlen(self.hook.origin - self.origin) < 50 || !self.on_hook) {
  234.             player_grapple3();
  235.             return;
  236.         }
  237.     };
  238. void()  player_grapple5 =  [$axattd4, player_run    ] 
  239. //    {self.weaponframe=5;};
  240.     {self.weaponframe=1;};
  241. //--ZOID
  242. //============================================================================
  243.  
  244. void() player_nail1   =[$nailatt1, player_nail2  ] 
  245. {
  246.     self.effects = self.effects | EF_MUZZLEFLASH;
  247.  
  248.     if (!self.button0)
  249.         {player_run ();return;}
  250.     self.weaponframe = self.weaponframe + 1;
  251.     if (self.weaponframe == 9)
  252.         self.weaponframe = 1;
  253.     SuperDamageSound();
  254.     W_FireSpikes (4);
  255.     self.attack_finished = time + 0.2;
  256. };
  257. void() player_nail2   =[$nailatt2, player_nail1  ]
  258. {
  259.     self.effects = self.effects | EF_MUZZLEFLASH;
  260.  
  261.     if (!self.button0)
  262.         {player_run ();return;}
  263.     self.weaponframe = self.weaponframe + 1;
  264.     if (self.weaponframe == 9)
  265.         self.weaponframe = 1;
  266.     SuperDamageSound();
  267.     W_FireSpikes (-4);
  268.     self.attack_finished = time + 0.2;
  269. };
  270.  
  271. //============================================================================
  272.  
  273. void(float ox) W_FireLavaSpikes;
  274.  
  275. void() player_lava_nail1   =[$nailatt1, player_lava_nail2  ] 
  276. {
  277.     self.effects = self.effects | EF_MUZZLEFLASH;
  278.  
  279.     if (!self.button0)
  280.         {player_run ();return;}
  281.     self.weaponframe = self.weaponframe + 1;
  282.     if (self.weaponframe == 9)
  283.         self.weaponframe = 1;
  284.     SuperDamageSound();
  285.     W_FireLavaSpikes (4);
  286.     self.attack_finished = time + 0.2;
  287. };
  288. void() player_lava_nail2   =[$nailatt2, player_lava_nail1  ]
  289. {
  290.     self.effects = self.effects | EF_MUZZLEFLASH;
  291.  
  292.     if (!self.button0)
  293.         {player_run ();return;}
  294.     self.weaponframe = self.weaponframe + 1;
  295.     if (self.weaponframe == 9)
  296.         self.weaponframe = 1;
  297.     SuperDamageSound();
  298.     W_FireLavaSpikes (-4);
  299.     self.attack_finished = time + 0.2;
  300. };
  301.  
  302. //============================================================================
  303. void() W_FirePlasma;
  304.  
  305. void() player_light1   =[$light1, player_light2  ] 
  306. {
  307.     self.effects = self.effects | EF_MUZZLEFLASH;
  308.  
  309.     if (!self.button0)
  310.         {player_run ();return;}
  311.     self.weaponframe = self.weaponframe + 1;
  312.     if (self.weaponframe == 5)
  313.         self.weaponframe = 1;
  314.     SuperDamageSound();
  315.     
  316.     if (self.weapon == IT_LIGHTNING)
  317.     {        
  318.         W_FireLightning();
  319.         self.attack_finished = time + 0.2;
  320.     }
  321.     else if (self.weapon == IT_PLASMA_GUN)
  322.     {
  323.         W_FirePlasma(); 
  324.         player_run();
  325.         return;
  326.     }
  327. };
  328. void() player_light2   =[$light2, player_light1  ]
  329. {
  330.     self.effects = self.effects | EF_MUZZLEFLASH;
  331.  
  332.     if (!self.button0)
  333.         {player_run ();return;}
  334.     self.weaponframe = self.weaponframe + 1;
  335.     if (self.weaponframe == 5)
  336.         self.weaponframe = 1;
  337.     SuperDamageSound();
  338.     
  339.     if (self.weapon == IT_LIGHTNING)
  340.     {        
  341.         W_FireLightning();
  342.         self.attack_finished = time + 0.2;
  343.     }
  344. };
  345.  
  346. //============================================================================
  347.  
  348.  
  349. void() player_rocket1   =[$rockatt1, player_rocket2  ] {self.weaponframe=1;
  350. self.effects = self.effects | EF_MUZZLEFLASH;};
  351. void() player_rocket2   =[$rockatt2, player_rocket3  ] {self.weaponframe=2;};
  352. void() player_rocket3   =[$rockatt3, player_rocket4  ] {self.weaponframe=3;};
  353. void() player_rocket4   =[$rockatt4, player_rocket5  ] {self.weaponframe=4;};
  354. void() player_rocket5   =[$rockatt5, player_rocket6  ] {self.weaponframe=5;};
  355. void() player_rocket6   =[$rockatt6, player_run  ] {self.weaponframe=6;};
  356. void(float num_bubbles) DeathBubbles;
  357.  
  358. void() PainSound =
  359. {
  360. local float        rs;
  361.  
  362.     if (self.health < 0)
  363.         return;
  364.  
  365.     if (damage_attacker.classname == "teledeath")
  366.     {
  367.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  368.         return;
  369.     }
  370.  
  371. // water pain sounds
  372.     if (self.watertype == CONTENT_WATER && self.waterlevel == 3)
  373.     {
  374.         DeathBubbles(1);
  375.         if (random() > 0.5)
  376.             sound (self, CHAN_VOICE, "player/drown1.wav", 1, ATTN_NORM);
  377.         else
  378.             sound (self, CHAN_VOICE, "player/drown2.wav", 1, ATTN_NORM);
  379.         return;
  380.     }
  381.  
  382. // slime pain sounds
  383.     if (self.watertype == CONTENT_SLIME)
  384.     {
  385. // FIX ME    put in some steam here
  386.         if (random() > 0.5)
  387.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  388.         else
  389.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  390.         return;
  391.     }
  392.  
  393.     if (self.watertype == CONTENT_LAVA)
  394.     {
  395.         if (random() > 0.5)
  396.             sound (self, CHAN_VOICE, "player/lburn1.wav", 1, ATTN_NORM);
  397.         else
  398.             sound (self, CHAN_VOICE, "player/lburn2.wav", 1, ATTN_NORM);
  399.         return;
  400.     }
  401.  
  402.     if (self.pain_finished > time)
  403.     {
  404.         self.axhitme = 0;
  405.         return;
  406.     }
  407.     self.pain_finished = time + 0.5;
  408.  
  409. // don't make multiple pain sounds right after each other
  410.  
  411. // ax pain sound
  412.     if (self.axhitme == 1)
  413.     {
  414.         self.axhitme = 0;
  415.         sound (self, CHAN_VOICE, "player/axhit1.wav", 1, ATTN_NORM);
  416.         return;
  417.     }
  418.     
  419.  
  420.     rs = rint((random() * 5) + 1);
  421.  
  422.     self.noise = "";
  423.     if (rs == 1)
  424.         self.noise = "player/pain1.wav";
  425.     else if (rs == 2)
  426.         self.noise = "player/pain2.wav";
  427.     else if (rs == 3)
  428.         self.noise = "player/pain3.wav";
  429.     else if (rs == 4)
  430.         self.noise = "player/pain4.wav";
  431.     else if (rs == 5)
  432.         self.noise = "player/pain5.wav";
  433.     else
  434.         self.noise = "player/pain6.wav";
  435.  
  436.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
  437.     return;
  438. };
  439.  
  440. void()    player_pain1 =    [    $pain1,    player_pain2    ] {PainSound();self.weaponframe=0;};
  441. void()    player_pain2 =    [    $pain2,    player_pain3    ] {};
  442. void()    player_pain3 =    [    $pain3,    player_pain4    ] {};
  443. void()    player_pain4 =    [    $pain4,    player_pain5    ] {};
  444. void()    player_pain5 =    [    $pain5,    player_pain6    ] {};
  445. void()    player_pain6 =    [    $pain6,    player_run    ] {};
  446.  
  447. void()    player_axpain1 =    [    $axpain1,    player_axpain2    ] {PainSound();self.weaponframe=0;};
  448. void()    player_axpain2 =    [    $axpain2,    player_axpain3    ] {};
  449. void()    player_axpain3 =    [    $axpain3,    player_axpain4    ] {};
  450. void()    player_axpain4 =    [    $axpain4,    player_axpain5    ] {};
  451. void()    player_axpain5 =    [    $axpain5,    player_axpain6    ] {};
  452. void()    player_axpain6 =    [    $axpain6,    player_run    ] {};
  453.  
  454. void() player_pain =
  455. {
  456.     if (self.weaponframe)
  457.         return;
  458.  
  459.     if (self.invisible_finished > time)
  460.         return;        // eyes don't have pain frames
  461.  
  462.     if (self.weapon == IT_AXE)
  463.         player_axpain1 ();
  464.     else
  465.         player_pain1 ();
  466. };
  467.  
  468. void() player_diea1;
  469. void() player_dieb1;
  470. void() player_diec1;
  471. void() player_died1;
  472. void() player_diee1;
  473. void() player_die_ax1;
  474.  
  475. void() DeathBubblesSpawn =
  476. {
  477. local entity    bubble;
  478.     if (self.owner.waterlevel != 3)
  479.         return;
  480.     bubble = spawn();
  481.     setmodel (bubble, "progs/s_bubble.spr");
  482.     setorigin (bubble, self.owner.origin + '0 0 24');
  483.     bubble.movetype = MOVETYPE_NOCLIP;
  484.     bubble.solid = SOLID_NOT;
  485.     bubble.velocity = '0 0 15';
  486.     bubble.nextthink = time + 0.5;
  487.     bubble.think = bubble_bob;
  488.     bubble.classname = "bubble";
  489.     bubble.frame = 0;
  490.     bubble.cnt = 0;
  491.     setsize (bubble, '-8 -8 -8', '8 8 8');
  492.     self.nextthink = time + 0.1;
  493.     self.think = DeathBubblesSpawn;
  494.     self.air_finished = self.air_finished + 1;
  495.     if (self.air_finished >= self.bubble_count)
  496.         remove(self);
  497. };
  498.  
  499. void(float num_bubbles) DeathBubbles =
  500. {
  501. local entity    bubble_spawner;
  502.     
  503.     bubble_spawner = spawn();
  504.     setorigin (bubble_spawner, self.origin);
  505.     bubble_spawner.movetype = MOVETYPE_NONE;
  506.     bubble_spawner.solid = SOLID_NOT;
  507.     bubble_spawner.nextthink = time + 0.1;
  508.     bubble_spawner.think = DeathBubblesSpawn;
  509.     bubble_spawner.air_finished = 0;
  510.     bubble_spawner.owner = self;
  511.     bubble_spawner.bubble_count = num_bubbles;
  512.     return;
  513. };
  514.  
  515.  
  516. void() DeathSound =
  517. {
  518. local float        rs;
  519.  
  520.     // water death sounds
  521.     if (self.waterlevel == 3)
  522.     {
  523.         DeathBubbles(20);
  524.         sound (self, CHAN_VOICE, "player/h2odeath.wav", 1, ATTN_NONE);
  525.         return;
  526.     }
  527.     
  528.     rs = rint ((random() * 4) + 1);
  529.     if (rs == 1)
  530.         self.noise = "player/death1.wav";
  531.     if (rs == 2)
  532.         self.noise = "player/death2.wav";
  533.     if (rs == 3)
  534.         self.noise = "player/death3.wav";
  535.     if (rs == 4)
  536.         self.noise = "player/death4.wav";
  537.     if (rs == 5)
  538.         self.noise = "player/death5.wav";
  539.  
  540.     sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
  541.     return;
  542. };
  543.  
  544.  
  545. void() PlayerDead =
  546. {
  547.     self.nextthink = -1;
  548. // allow respawn after a certain time
  549.     self.deadflag = DEAD_DEAD;
  550. };
  551.  
  552. vector(float dm) VelocityForDamage =
  553. {
  554.     local vector v;
  555.  
  556.     v_x = 100 * crandom();
  557.     v_y = 100 * crandom();
  558.     v_z = 200 + 100 * random();
  559.  
  560.     if (dm > -50)
  561.     {
  562. //        dprint ("level 1\n");
  563.         v = v * 0.7;
  564.     }
  565.     else if (dm > -200)
  566.     {
  567. //        dprint ("level 3\n");
  568.         v = v * 2;
  569.     }
  570.     else
  571.         v = v * 10;
  572.  
  573.     return v;
  574. };
  575.  
  576. void(string gibname, float dm) ThrowGib =
  577. {
  578.     local    entity new;
  579.  
  580.     new = spawn();
  581.     new.origin = self.origin;
  582.     setmodel (new, gibname);
  583.     setsize (new, '0 0 0', '0 0 0');
  584.     new.velocity = VelocityForDamage (dm);
  585.     new.movetype = MOVETYPE_BOUNCE;
  586.     new.solid = SOLID_NOT;
  587.     new.avelocity_x = random()*600;
  588.     new.avelocity_y = random()*600;
  589.     new.avelocity_z = random()*600;
  590.     new.think = SUB_Remove;
  591.     new.ltime = time;
  592.     new.nextthink = time + 10 + random()*10;
  593.     new.frame = 0;
  594.     new.flags = 0;
  595. };
  596.  
  597. void(string gibname, float dm) ThrowHead =
  598. {
  599.     setmodel (self, gibname);
  600.     self.frame = 0;
  601.     self.nextthink = -1;
  602.     self.movetype = MOVETYPE_BOUNCE;
  603.     self.takedamage = DAMAGE_NO;
  604.     self.solid = SOLID_NOT;
  605.     self.view_ofs = '0 0 8';
  606.     setsize (self, '-16 -16 0', '16 16 56');
  607.     self.velocity = VelocityForDamage (dm);
  608.     self.origin_z = self.origin_z - 24;
  609.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  610.     self.avelocity = crandom() * '0 600 0';
  611. };
  612.  
  613.  
  614. void() GibPlayer =
  615. {
  616.     ThrowHead ("progs/h_player.mdl", self.health);
  617.     ThrowGib ("progs/gib1.mdl", self.health);
  618.     ThrowGib ("progs/gib2.mdl", self.health);
  619.     ThrowGib ("progs/gib3.mdl", self.health);
  620.  
  621.     self.deadflag = DEAD_DEAD;
  622.  
  623.     if (damage_attacker.classname == "teledeath")
  624.     {
  625.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  626.         return;
  627.     }
  628.  
  629.     if (damage_attacker.classname == "teledeath2")
  630.     {
  631.         sound (self, CHAN_VOICE, "player/teledth1.wav", 1, ATTN_NONE);
  632.         return;
  633.     }
  634.         
  635.     if (random() < 0.5)
  636.         sound (self, CHAN_VOICE, "player/gib.wav", 1, ATTN_NONE);
  637.     else
  638.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NONE);
  639. };
  640.  
  641. void() PlayerDie =
  642. {
  643.     local    float    i;
  644.     
  645.     self.items = self.items - (self.items & IT_INVISIBILITY);
  646.     self.invisible_finished = 0;    // don't die as eyes
  647.     self.invincible_finished = 0;
  648.     self.super_damage_finished = 0;
  649.     self.radsuit_finished = 0;
  650.     self.modelindex = modelindex_player;    // don't use eyes
  651.  
  652.     self.gravity = 1.0;
  653.     self.shield_finished = 0;
  654.     self.antigrav_finished = 0;
  655.  
  656. //ZOID--
  657.     if (deathmatch || coop)
  658.     {
  659.         DropBackpack();
  660.         TeamDropFlagOfPlayer(self);
  661.         DropRune();
  662.     }
  663.  
  664.     if (self.ctf_killed == 2)
  665.         self.ctf_killed = 0;
  666.     else
  667.         self.ctf_killed = 1;
  668. //--ZOID
  669.     
  670.     self.weaponmodel="";
  671.     self.view_ofs = '0 0 -8';
  672.     self.deadflag = DEAD_DYING;
  673.     self.solid = SOLID_NOT;
  674.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  675.     self.movetype = MOVETYPE_TOSS;
  676.     if (self.velocity_z < 10)
  677.         self.velocity_z = self.velocity_z + random()*300;
  678.     
  679.     if (self.health < -40)
  680.     {
  681.         GibPlayer ();
  682.         return;
  683.     }
  684.  
  685.     DeathSound();
  686.     
  687.     self.angles_x = 0;
  688.     self.angles_z = 0;
  689.     
  690.     if (self.weapon == IT_AXE)
  691.     {
  692.         player_die_ax1 ();
  693.         return;
  694.     }
  695.     
  696.     i = cvar("temp1");
  697.     if (!i)
  698.         i = 1 + floor(random()*6);
  699.     
  700.     if (i == 1)
  701.         player_diea1();
  702.     else if (i == 2)
  703.         player_dieb1();
  704.     else if (i == 3)
  705.         player_diec1();
  706.     else if (i == 4)
  707.         player_died1();
  708.     else
  709.         player_diee1();
  710.  
  711. };
  712.  
  713. void() set_suicide_frame =
  714. {    // used by klill command and diconnect command
  715.     if (self.model != "progs/player.mdl")
  716.         return;    // allready gibbed
  717.     self.frame = $deatha11;
  718.     self.solid = SOLID_NOT;
  719.     self.movetype = MOVETYPE_TOSS;
  720.     self.deadflag = DEAD_DEAD;
  721.     self.nextthink = -1;
  722. };
  723.  
  724.  
  725. void()    player_diea1    =    [    $deatha1,    player_diea2    ] {};
  726. void()    player_diea2    =    [    $deatha2,    player_diea3    ] {};
  727. void()    player_diea3    =    [    $deatha3,    player_diea4    ] {};
  728. void()    player_diea4    =    [    $deatha4,    player_diea5    ] {};
  729. void()    player_diea5    =    [    $deatha5,    player_diea6    ] {};
  730. void()    player_diea6    =    [    $deatha6,    player_diea7    ] {};
  731. void()    player_diea7    =    [    $deatha7,    player_diea8    ] {};
  732. void()    player_diea8    =    [    $deatha8,    player_diea9    ] {};
  733. void()    player_diea9    =    [    $deatha9,    player_diea10    ] {};
  734. void()    player_diea10    =    [    $deatha10,    player_diea11    ] {};
  735. void()    player_diea11    =    [    $deatha11,    player_diea11 ] {PlayerDead();};
  736.  
  737. void()    player_dieb1    =    [    $deathb1,    player_dieb2    ] {};
  738. void()    player_dieb2    =    [    $deathb2,    player_dieb3    ] {};
  739. void()    player_dieb3    =    [    $deathb3,    player_dieb4    ] {};
  740. void()    player_dieb4    =    [    $deathb4,    player_dieb5    ] {};
  741. void()    player_dieb5    =    [    $deathb5,    player_dieb6    ] {};
  742. void()    player_dieb6    =    [    $deathb6,    player_dieb7    ] {};
  743. void()    player_dieb7    =    [    $deathb7,    player_dieb8    ] {};
  744. void()    player_dieb8    =    [    $deathb8,    player_dieb9    ] {};
  745. void()    player_dieb9    =    [    $deathb9,    player_dieb9    ] {PlayerDead();};
  746.  
  747. void()    player_diec1    =    [    $deathc1,    player_diec2    ] {};
  748. void()    player_diec2    =    [    $deathc2,    player_diec3    ] {};
  749. void()    player_diec3    =    [    $deathc3,    player_diec4    ] {};
  750. void()    player_diec4    =    [    $deathc4,    player_diec5    ] {};
  751. void()    player_diec5    =    [    $deathc5,    player_diec6    ] {};
  752. void()    player_diec6    =    [    $deathc6,    player_diec7    ] {};
  753. void()    player_diec7    =    [    $deathc7,    player_diec8    ] {};
  754. void()    player_diec8    =    [    $deathc8,    player_diec9    ] {};
  755. void()    player_diec9    =    [    $deathc9,    player_diec10    ] {};
  756. void()    player_diec10    =    [    $deathc10,    player_diec11    ] {};
  757. void()    player_diec11    =    [    $deathc11,    player_diec12    ] {};
  758. void()    player_diec12    =    [    $deathc12,    player_diec13    ] {};
  759. void()    player_diec13    =    [    $deathc13,    player_diec14    ] {};
  760. void()    player_diec14    =    [    $deathc14,    player_diec15    ] {};
  761. void()    player_diec15    =    [    $deathc15,    player_diec15 ] {PlayerDead();};
  762.  
  763. void()    player_died1    =    [    $deathd1,    player_died2    ] {};
  764. void()    player_died2    =    [    $deathd2,    player_died3    ] {};
  765. void()    player_died3    =    [    $deathd3,    player_died4    ] {};
  766. void()    player_died4    =    [    $deathd4,    player_died5    ] {};
  767. void()    player_died5    =    [    $deathd5,    player_died6    ] {};
  768. void()    player_died6    =    [    $deathd6,    player_died7    ] {};
  769. void()    player_died7    =    [    $deathd7,    player_died8    ] {};
  770. void()    player_died8    =    [    $deathd8,    player_died9    ] {};
  771. void()    player_died9    =    [    $deathd9,    player_died9    ] {PlayerDead();};
  772.  
  773. void()    player_diee1    =    [    $deathe1,    player_diee2    ] {};
  774. void()    player_diee2    =    [    $deathe2,    player_diee3    ] {};
  775. void()    player_diee3    =    [    $deathe3,    player_diee4    ] {};
  776. void()    player_diee4    =    [    $deathe4,    player_diee5    ] {};
  777. void()    player_diee5    =    [    $deathe5,    player_diee6    ] {};
  778. void()    player_diee6    =    [    $deathe6,    player_diee7    ] {};
  779. void()    player_diee7    =    [    $deathe7,    player_diee8    ] {};
  780. void()    player_diee8    =    [    $deathe8,    player_diee9    ] {};
  781. void()    player_diee9    =    [    $deathe9,    player_diee9    ] {PlayerDead();};
  782.  
  783. void()    player_die_ax1    =    [    $axdeth1,    player_die_ax2    ] {};
  784. void()    player_die_ax2    =    [    $axdeth2,    player_die_ax3    ] {};
  785. void()    player_die_ax3    =    [    $axdeth3,    player_die_ax4    ] {};
  786. void()    player_die_ax4    =    [    $axdeth4,    player_die_ax5    ] {};
  787. void()    player_die_ax5    =    [    $axdeth5,    player_die_ax6    ] {};
  788. void()    player_die_ax6    =    [    $axdeth6,    player_die_ax7    ] {};
  789. void()    player_die_ax7    =    [    $axdeth7,    player_die_ax8    ] {};
  790. void()    player_die_ax8    =    [    $axdeth8,    player_die_ax9    ] {};
  791. void()    player_die_ax9    =    [    $axdeth9,    player_die_ax9    ] {PlayerDead();};
  792.  
  793. void(entity shieldOwner, vector dir) shield_spawn;
  794.  
  795. void() player_touch = 
  796. {
  797.     local vector    vec;
  798.     local float        dot;
  799.     local float        doDamage;
  800.     
  801.     if ( self.items2 & IT2_SHIELD)
  802.     {
  803.         if ( other.classname == "player")
  804.         {
  805.             makevectors ( self.angles );
  806.             vec = normalize (other.origin - self.origin);
  807.             dot = vec * v_forward;
  808.             if (dot < 0.3)
  809.                 return;
  810.                 
  811.             makevectors ( self.angles );
  812.             other.velocity = v_forward * 500;
  813.             other.velocity_z = 250;
  814.     
  815.             doDamage = FALSE;        
  816.             if (TeamArmorDam(other, self, self, 15))
  817.             {
  818.                 if(self.shield_death_time < time)
  819.                     doDamage = TRUE;
  820.             }
  821.  
  822.             // if shield has timed out, respawn it.
  823.             // don't do particles more than twice a second. 
  824.             if ( self.shield_death_time < time)
  825.             {
  826.                 sound(self,CHAN_WEAPON,"enforcer/enfstop.wav", 1, ATTN_NORM);
  827.     
  828.                 WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  829.                 WriteByte (MSG_BROADCAST, TE_EXPLOSION2);
  830.                 WriteCoord (MSG_BROADCAST, other.origin_x);
  831.                 WriteCoord (MSG_BROADCAST, other.origin_y);
  832.                 WriteCoord (MSG_BROADCAST, other.origin_z);
  833.                 WriteByte (MSG_BROADCAST, 230);
  834.                 WriteByte (MSG_BROADCAST, 5);
  835.  
  836.                 shield_spawn ( self, v_forward );
  837.             }
  838.  
  839.             if (doDamage)
  840.                 T_Damage (other, self.shield_entity, self.shield_entity, 15);
  841.  
  842. //            self.shield_death_time = time + 0.5;
  843.         }
  844.     }
  845. };
  846.